package com.xinqi.modules.chat.favorite.service;

import com.xinqi.common.base.response.PageInfo;
import com.xinqi.common.base.response.Param;
import com.xinqi.common.mybatis.data.service.BaseService;
import com.xinqi.modules.chat.favorite.domain.FavoriteContentEntity;
import com.xinqi.modules.chat.favorite.dto.req.*;
import com.xinqi.modules.chat.favorite.dto.rsp.FavoriteContentResultDTO;

import java.util.List;

/**
 * 收藏内容表服务层
 *
 * @author: yyzhen
 * @date: 2023/03/23
 */
public interface FavoriteContentService extends BaseService<FavoriteContentEntity> {

    /**
     * 收藏
     *
     * @param dto
     * @return
     */
    List<FavoriteContentResultDTO> collection(CollectContentDTO dto);

    /**
     * 收藏 -- 修改标签
     *
     * @param dto
     * @return
     */
    Boolean editTag(CollectEditTagDTO dto);

    /**
     * 收藏 -- 多选 -- 添加标签
     *
     * @param dto
     * @return
     */
    Boolean editBatchTag(CollectEditBatchTagDTO dto);

    /**
     * 收藏 -- 删除标签
     *
     * @param dto
     * @return
     */
    Boolean delTag(CollectDeleteTagDTO dto);

    /**
     * 收藏 -- 多选 -- 删除标签
     *
     * @param dto
     * @return
     */
    Boolean delBatchTag(CollectDeleteBatchTagDTO dto);

    /**
     * 收藏 -- 删除
     *
     * @param id
     * @param operationUserId
     * @return
     */
    Boolean removeById(Long id, Long operationUserId);

    /**
     * 收藏 -- 多选 -- 删除
     *
     * @param dto
     * @return
     */
    Boolean removeByIds(FavoriteContentDeleteDTO dto);

    /**
     * 收藏 --分页列表
     *
     * @param pageable
     * @param query
     * @return
     */
    PageInfo<FavoriteContentResultDTO> selectPage(Param pageable, FavoriteContentQueryDTO query);

    /**
     * 收藏 --APP分页列表
     *
     * @param pageable
     * @param query
     * @return
     */
    PageInfo<FavoriteContentResultDTO> selectAppPage(Param pageable, FavoriteContentQueryDTO query);

    /**
     * 用户查看收藏（当前用户为收藏拥有着则修改最近查看时间）
     *
     * @param id
     * @param operationUserId 当前操作用户
     * @return
     */
    FavoriteContentResultDTO selectById(Long id, Long operationUserId);


}
